////////////////////////////////////////////////////////////////////////////////
//
//  FLEX USER GROUP HOKURIKU
//  Copyright 2009 Flex User Group Hokuriku
//  All Rights Reserved.
// 
//  NOTICE: Flex User Group Hokuriku permits you to use, 
//  modify, and distribute this file 
//  in accordance with the terms of the license agreement accompanying it.
//
////////////////////////////////////////////////////////////////////////////////
package net.fxug.hokuriku.chocolat.model
{
    import flash.errors.IllegalOperationError;

    import net.fxug.hokuriku.chocolat.events.VoteEvent;
    import net.fxug.hokuriku.chocolat.service.VoteManager;

    /**
     * 投票情報を表すクラス。
     * 内部にGoodEventとBadEventの投票状況を保持する。
     *
     * @author
     */
    [Bindable]
    public class VoteInfo
    {
        /** タイマーに影響を与える上限値 */
        public static const ADD_COUNT_MAX:int = 5;
        /** ユーザID */
        public var userId:String;
        /** GoodEventの実行回数 */
        public var goodCount:int;
        /** BadEventの実行回数 */
        public var badCount:int;

        /**
         * コンストラクタ
         * @param userId ユーザID
         */
        public function VoteInfo(userId:String)
        {
            this.userId = userId;
            this.goodCount = 0;
            this.badCount = 0;
        }

        /**
         * カウントアップを行う.
         * カウントアップ時に上限値を超えた場合にBoolean値で通知を行う。
         * @param key VoteEvent.GOOD_EVENT or VoteEvent.BAD_EVENT
         * @return 上限を超えていない場合にtrueを返す
         */
        public function addAndCheck(key:String):Boolean
        {
            var ret:Boolean = true;
            if (key == VoteEvent.GOOD_EVENT)
            {
                if (this.goodCount >= ADD_COUNT_MAX)
                {
                    ret = false;
                }
                this.goodCount++;
            }
            else if (key == VoteEvent.BAD_EVENT)
            {
                if (this.badCount >= ADD_COUNT_MAX)
                {
                    ret = false;
                }
                this.badCount++;
            }
            return ret;
        }

        /**
         * @inheritDoc Object#toString()
         */
        public function toString():String
        {
            return "userId::" + this.userId + ",goodCount::" + this.goodCount + ",badCount::" + this.badCount;
        }
    }
}